/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Services.UsuarioGrupoService;

import mapeos.Grupo;
import mapeos.Usuariogrupo;
import dataBase.HibernateUtil;
import exeptions.GeneralException;
import exeptions.MsgException;
import java.util.ArrayList;
import java.util.List;
import mapeos.Usuario;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.hibernate.exception.ConstraintViolationException;

/**
 *
 * @author ivanpianetti
 */
public class UsuarioGrupoService implements IUsuarioGrupoService {

    private static IUsuarioGrupoService unUsuarioGrupoService;

    public static IUsuarioGrupoService getInstance() {
        if (unUsuarioGrupoService == null || !(unUsuarioGrupoService instanceof IUsuarioGrupoService)) {
            unUsuarioGrupoService = new UsuarioGrupoService();
        }
        return unUsuarioGrupoService;
    }

    public List<Usuariogrupo> getAllByUsuario(Usuario pUsuario) throws GeneralException {
        Session s = HibernateUtil.currentSession();
        List<Usuariogrupo> listaUsuariosGrupos = new ArrayList<Usuariogrupo>();
        try {
            Transaction t = s.beginTransaction();
            listaUsuariosGrupos = s.createCriteria(Usuariogrupo.class).
                    add(Restrictions.eq("usuario.idUsuario", pUsuario.getIdUsuario())).list();
            t.commit();
        } catch (ConstraintViolationException he) {
            throw new GeneralException(MsgException.getMsgException("ERROR?", he));
        } catch (HibernateException he) {
            throw new HibernateException(he);
        } finally {
            if (s.isOpen()) {
                s.close();
            }
        }
        return listaUsuariosGrupos;
    }

    public List<Usuariogrupo> getAllByGrupo(Grupo pGrupo) throws GeneralException {
        Session s = HibernateUtil.currentSession();
        List<Usuariogrupo> listaUsuariosGrupos = new ArrayList<Usuariogrupo>();
        try {
            Transaction t = s.beginTransaction();
            listaUsuariosGrupos = s.createCriteria(Usuariogrupo.class).
                    add(Restrictions.eq("grupo.idGrupo", pGrupo.getIdGrupo())).list();
            t.commit();
        } catch (ConstraintViolationException he) {
            throw new GeneralException(MsgException.getMsgException("ERROR?", he));
        } catch (HibernateException he) {
            throw new HibernateException(he);
        } finally {
            if (s.isOpen()) {
                s.close();
            }
        }
        return listaUsuariosGrupos;
    }

    public void insert(Usuariogrupo pUsuariogrupo) throws GeneralException {
        Session s = HibernateUtil.currentSession();
        try {
            Transaction t = s.beginTransaction();
            s.save(pUsuariogrupo);
            t.commit();
        } catch (ConstraintViolationException he) {
            throw new GeneralException(MsgException.getMsgException("ERROR?", he));
        } catch (HibernateException he) {
            throw new HibernateException(he);
        } finally {
            if (s.isOpen()) {
                s.close();
            }
        }
    }

    public void delete(Usuariogrupo pUsuariogrupo) throws GeneralException {
        Session s = HibernateUtil.currentSession();
        try {
            Transaction t = s.beginTransaction();
            s.delete(pUsuariogrupo);
            t.commit();
        } catch (HibernateException he) {
            throw new HibernateException(he);
        } finally {
            if (s.isOpen()) {
                s.close();
            }
        }
    }
}
